//package com.ocom.aiot.business;
//
//import com.rabbitmq.client.Channel;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.messaging.handler.annotation.Headers;
//import org.springframework.stereotype.Component;
//
//import java.util.Map;
//
//
//@Component
//public class GoodsStockMqListener {
//
//	/**
//	 * 把该监听命名为A监听
//	 * 监听队列  远程服务支付接口发送消息  该队列会接受
//	 * [message, headers, channel]
//	 * @return {@link }
//	 * @throws
//	 */
//	@RabbitListener(queues = "order_goods_stock_queue")
//	public void process(Message message, @Headers Map<String, Object> headers, Channel channel) throws Exception {
//
//		System.out.println("order_goods_stock_queue");
//		System.out.println(message);
//		String orderId = new String(message.getBody(), "UTF-8");
//
//		//TODO 数据库操作样例
//
//		try {
//			//需要处理重复消费，这里就不说明了
////			int a = 1/0;//模拟异常
//
//			if (true) {
//				// 手动签收消息,通知mq服务器端删除该消息
//				channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//			//出现异常后，原本队列消息进入死信队列
//			channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
//		}
//	}
//
//	/**
//	 * 把该监听命名为B监听
//	 * 监听死信队列  远程服务支付接口发送消息  该队列会接受
//	 * [message, headers, channel]
//	 * @return {@link }
//	 * @throws
//	 */
//	@RabbitListener(queues = "order_goods_stock_die_queue")
//	public void processForDie(Message message, @Headers Map<String, Object> headers, Channel channel) throws Exception {
//
//		String orderId = new String(message.getBody(), "UTF-8");
//
//		System.out.println("die:"+orderId);
//		//TODO 数据库操作样例
//
//		try {
//			int a = 1/0; //模拟死信队列出现异常
//			int cutNum = 0;//再次扣减库存
//			if (cutNum > 0) {
//				// 手动签收消息,通知mq服务器端删除该消息
//				channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//			}
//
//		} catch (Exception e) {
//			e.printStackTrace();
//			//死信队列出现异常进入业务补偿机制
////			int orderNum = orderService.update(orderModel);
//			int orderNum = 0;
//			//TODO 数据库操作样例
//			//业务补偿
//			if(orderNum == 0){
//				// // 丢弃该消息
//				System.out.println("丢弃消息");
//				channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
//			}else {
//				channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);//继续消费该消息
//			}
//		}
//	}
//
//}
